﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Data;
using NGI_BaseDatos;
using NGI_Entidades;
using NGI_Auxiliares;

namespace NGI_Logica
{
    public class Proveedores
    {
        public static EntidadCuentaCorriente[] TraerCuentaCorriente(Boolean MostrarTodos, Boolean SoloDeuda)
        {
            EntidadCuentaCorriente[] Listado;
            Parametro[] ListadoParametros = new Parametro[2];
            ListadoParametros[0] = new Parametro("@bitTodos", MostrarTodos);
            ListadoParametros[1] = new Parametro("@bitSoloPositivos", SoloDeuda);

            DataTable dt = BaseDatos.Traer("proc_ObtenerCuentaCorrienteDeProveedores", ListadoParametros);
            if (dt.Rows.Count == 0)
                return new EntidadCuentaCorriente[0];

            Listado = new EntidadCuentaCorriente[dt.Rows.Count];
            int Contador = 0;
            foreach (DataRow dr in dt.Rows)
            {
                EntidadCuentaCorriente unProveedor = EntidadCuentaCorriente.Entidad(Convert.ToInt32(dr["ID"].ToString()), dr["RazonSocial"].ToString(), dr["CUIT"].ToString(), Convert.ToDouble(dr["SaldoTotal"].ToString()), Convert.ToBoolean(dr["Activo"].ToString()));
                Listado[Contador] = unProveedor;
                Contador++;
            }

            return Listado;
        }

        public static ArrayList CargarTodos(Boolean IncluirInactivos)
        {
            ArrayList ListadoProveedores;

            DataTable dt = BaseDatos.Traer("proc_ObtenerProveedoresExistentesParaListar");
            if (dt.Rows.Count == 0)
                return new ArrayList();

            ListadoProveedores = new ArrayList();
            foreach (DataRow dr in dt.Rows)
            {
                Proveedor unProveedor = Proveedor.ParaListar(Convert.ToInt32(dr["ID"].ToString()), dr["RazonSocial"].ToString());
                ListadoProveedores.Add(unProveedor);
            }

            return ListadoProveedores;
        }

        public static Proveedor TraerDatosDe(Int32 Id)
        {
            Parametro[] ListadoParametros = new Parametro[1];
            ListadoParametros[0] = new Parametro("@intProveedorID", Id);

            DataTable dt = BaseDatos.Traer("proc_ObtenerProveedor", ListadoParametros);
            if (dt.Rows.Count == 0)
                return new Proveedor();

            DataRow dr = dt.Rows[0];

            dt = BaseDatos.Traer("proc_ObtenerTelefonosDeProveedor", ListadoParametros);

            Telefono[] Telefonos;
            Proveedor unProveedor;
            Provincia unaProvincia = Provincia.DatosMinimos(Convert.ToInt32(dr["Provincia_Id"].ToString()));
            if (dt.Rows.Count > 0)
            {
                Telefonos = new Telefono[dt.Rows.Count];
                Int32 a = 0;
                foreach (DataRow drTel in dt.Rows)
                {
                    Telefonos[a] = Telefono.Existente(Convert.ToInt32(drTel["Id"].ToString()), TipoTelefono.DameCodigoDe(Convert.ToInt32(drTel["TipoTelefono_Id"].ToString())), drTel["Numero"].ToString(), Convert.ToBoolean(drTel["Activo"].ToString()));
                    a++;
                }
                unProveedor = Proveedor.Existente(Convert.ToInt32(dr["Id"].ToString()), dr["CUIT"].ToString(), dr["RazonSocial"].ToString(), dr["Email"].ToString(), dr["Direccion"].ToString(), dr["CodigoPostal"].ToString(), dr["Ciudad"].ToString(), dr["Localidad"].ToString(),  unaProvincia, dr["Contacto"].ToString(), dr["IngresosBrutos"].ToString(), Convert.ToInt32(dr["ISIB"].ToString()), Convert.ToDouble(dr["SaldoTotal"].ToString()), CategoriaIVA.DatosMinimos(Convert.ToInt32(dr["CategoriaIVA"].ToString())), Telefonos, Convert.ToBoolean(dr["Activo"].ToString()));
            }
            else
            {
                unProveedor = Proveedor.Existente(Convert.ToInt32(dr["Id"].ToString()), dr["CUIT"].ToString(), dr["RazonSocial"].ToString(), dr["Email"].ToString(), dr["Direccion"].ToString(), dr["CodigoPostal"].ToString(), dr["Ciudad"].ToString(), dr["Localidad"].ToString(), unaProvincia, dr["Contacto"].ToString(), dr["IngresosBrutos"].ToString(), Convert.ToInt32(dr["ISIB"].ToString()), Convert.ToDouble(dr["SaldoTotal"].ToString()), CategoriaIVA.DatosMinimos(Convert.ToInt32(dr["CategoriaIVA"].ToString())), Convert.ToBoolean(dr["Activo"].ToString()));
            }


            return unProveedor;
        }

        public static void InsertarTelefonos(Proveedor unProveedor, Int32 UsuarioLogueadoID)
        {
            Parametro[] ListadoParametros = new Parametro[5];
            ListadoParametros[0] = new Parametro("@intUsuarioID", UsuarioLogueadoID);
            ListadoParametros[1] = new Parametro("@intProveedorID", unProveedor.ID);

            foreach (Telefono Tel in unProveedor.Telefonos)
            {
                ListadoParametros[2] = new Parametro("@intTipoTelefonoID", TipoTelefono.DameIndiceDe(Tel.Tipo));
                ListadoParametros[3] = new Parametro("@chvNumero", Tel.Numero);
                ListadoParametros[4] = new Parametro("@bitActivo", Tel.Activo);
                BaseDatos.Ejecutar("proc_InsertarTelefonoDeProveedor", ListadoParametros);
            }
        }

        public static void EliminarTelefonos(Proveedor unProveedor)
        {
            Parametro[] ListadoParametros = new Parametro[1];
            ListadoParametros[0] = new Parametro("@intProveedorID", unProveedor.ID);
            BaseDatos.Ejecutar("proc_EliminarTelefonosDeUnProveedor", ListadoParametros);
        }

        public static void Eliminar(Int32 IDProveedor)
        {

            Parametro[] ListadoParametros = new Parametro[1];
            ListadoParametros[0] = new Parametro("@intProveedorID", IDProveedor);
            BaseDatos.Ejecutar("proc_EliminarProveedor", ListadoParametros);
        }

        public static void Crear(Proveedor ProveedorNuevo, Int32 UsuarioLogueadoID)
        {
            Parametro[] ListadoParametros = new Parametro[14];
            ListadoParametros[0] = new Parametro("@intUsuarioID", UsuarioLogueadoID);
            ListadoParametros[1] = new Parametro("@chvCUIT", ProveedorNuevo.CUIT);
            ListadoParametros[2] = new Parametro("@chvRazonSocial", ProveedorNuevo.RazonSocial);
            ListadoParametros[3] = new Parametro("@chvEmail", ProveedorNuevo.Email);
            ListadoParametros[4] = new Parametro("@chvDireccion", ProveedorNuevo.Direccion);
            ListadoParametros[5] = new Parametro("@chvCodigoPostal", ProveedorNuevo.CodigoPostal);
            ListadoParametros[6] = new Parametro("@chvCiudad", ProveedorNuevo.Ciudad);
            ListadoParametros[7] = new Parametro("@intProvinciaID", ProveedorNuevo.Provincia.ID);
            ListadoParametros[8] = new Parametro("@chvContacto", ProveedorNuevo.Contacto);
            ListadoParametros[9] = new Parametro("@intCategoriaIVA", ProveedorNuevo.CategoriaIVA.ID);
            ListadoParametros[10] = new Parametro("@chvIngresosBrutos", ProveedorNuevo.IngresosBrutos);
            ListadoParametros[11] = new Parametro("@intISIB", ProveedorNuevo.ISIB);
            ListadoParametros[12] = new Parametro("@chvLocalidad", ProveedorNuevo.Localidad);
            ListadoParametros[13] = new Parametro("@bitActivo", ProveedorNuevo.Activo);

            BaseDatos.Ejecutar("proc_InsertarProveedor", ListadoParametros);
        }

        public static void Modificar(Proveedor ProveedorExistente, Int32 UsuarioLogueadoID)
        {
            Parametro[] ListadoParametros = new Parametro[15];
            ListadoParametros[0] = new Parametro("@intUsuarioID", UsuarioLogueadoID);
            ListadoParametros[1] = new Parametro("@chvCUIT", ProveedorExistente.CUIT);
            ListadoParametros[2] = new Parametro("@chvRazonSocial", ProveedorExistente.RazonSocial);
            ListadoParametros[3] = new Parametro("@chvEmail", ProveedorExistente.Email);
            ListadoParametros[4] = new Parametro("@chvDireccion", ProveedorExistente.Direccion);
            ListadoParametros[5] = new Parametro("@chvCodigoPostal", ProveedorExistente.CodigoPostal);
            ListadoParametros[6] = new Parametro("@chvCiudad", ProveedorExistente.Ciudad);
            ListadoParametros[7] = new Parametro("@intProvinciaID", ProveedorExistente.Provincia.ID);
            ListadoParametros[8] = new Parametro("@chvContacto", ProveedorExistente.Contacto);
            ListadoParametros[9] = new Parametro("@intCategoriaIVA", ProveedorExistente.CategoriaIVA.ID);
            ListadoParametros[10] = new Parametro("@intProveedorID", ProveedorExistente.ID);
            ListadoParametros[11] = new Parametro("@chvIngresosBrutos", ProveedorExistente.IngresosBrutos);
            ListadoParametros[12] = new Parametro("@intISIB", ProveedorExistente.ISIB);
            ListadoParametros[13] = new Parametro("@chvLocalidad", ProveedorExistente.Localidad);
            ListadoParametros[14] = new Parametro("@bitActivo", ProveedorExistente.Activo);

            BaseDatos.Ejecutar("proc_ModificarProveedor", ListadoParametros);
        }
    }
}
